Inkjet printer having image decoding controller

ABSTRACT

An inkjet printer is provided having a printhead and a controller for controlling the print head. The controller has an interface for receiving compressed page data, a first decoder for decoding continuous tone image planes in the received compressed page data, a second decoder for decoding bi-level image planes in the received compressed page data, a half-toner for dithering separate color planes of the decoded continuous tone image planes which are output by the first decoder to separate buffers of the half-toner and a compositor for compositing the decoded bi-level image planes output by the second decoder with the dithered image planes, and a print head interface for outputting the composite to the print head.

CROSS REFERENCE TO RELATED APPLICATION

The present application is a Continuation of U.S. application Ser. No.10/943,941 filed on Sep. 20, 2004, which is a Continuation of U.S.application Ser. No. 09/575,108 filed on May 23, 2000, now issued asU.S. Pat. No. 6,795,215, the entire contents of which are hereinincorporated by reference.

FIELD OF THE INVENTION

The invention relates to a print engine controller (PEC) suitable foruse with a range of printer products. The invention further relates to aprint engine controller implemented in a print head interface chip.

BACKGROUND OF THE INVENTION

A range of printer types have evolved wherein an image is constructedfrom ink selectively applied to a page in dot format. In U.S. Pat. No.6,045,710 titled ‘Self-aligned construction and manufacturing processfor monolithic print heads’ to the inventor Kia Silverbrook there is setout an assessment of the prior art to drop on demand printers along withits manufacturing process.

A microelectomechanical drop on demand print head hereafter referred toas a Memjet print head has been described in co-pending United Statespatent applications filed simultaneously to the present application andhereby incorporated by cross reference: Our Docket USSN Number Our Title7,018,016 MJ62US Fluidic seal for an ink jet nozzle assembly 6,428,142IJ52US Ink jet print head having a moving nozzle with an externallyarranged actuator 6,526,658 IJM52US Method of manufacture of an ink jetprint head having a moving nozzle with an externally arranged actuator6,328,417 MJ63US Ink jet print head nozzle array 6,390,591 MJ58 Nozzleguard for an ink jet print head

The Memjet print head is developed from print head segments that arecapable of producing, for example, 1600 dpi bi-level dots of liquid inkacross the full width of a page. Dots are easily produced in isolation,allowing dispersed-dot dithering to be exploited to its fullest. Colorplanes might be printed in perfect registration, allowing idealdot-on-dot printing. The print head enables high-speed printing usingmicroelectromechanical ink drop technology.

Various methods, systems and apparatus relating to a printed page basedcommunications network that is best worked with high-speed page printinghas been disclosed in co-pending United States patentapplications/granted patents filed simultaneously by the applicant orassignee of the present invention and are hereby incorporated by crossreference: 09/575,197, 09/575,159, 09/575,123, 6,825,945, 09/575,165,6,813,039, 6,987,506, 7,038,797, 6,980,318, 6,816,274, 09/575,139,09/575,186, 6,681,045, 6,728,000, 09/575,145, 09/575,192, 09/575,181,09/575,193, 7,062,651, 6,789,194, 6,789,191, 6,644,642, 6,502,614,6,622,999, 6,669,385, 6,549,935, 6,987,573, 6,727,996, 6,591,884,6,439,706, 6,760,119, 09/575,198, 6,290,349, 6,428,155, 6,785,016,6,870,966, 6,822,639, 6,737,591, 7055739, 09/575,129, 6,830,196,6,832,717, 6,957,768, 09/575,162, 09/575,172, 09/575,170, 09/575,171,09/575,161, 6,428,133, 6,526,658, 6,315,399, 6,338,548, 6,540,319,6,328,431, 6,328,425, 6,991,320, 6,383,833, 6,464,332, 6,439,693,6,390,591, 7,018,016, 6,328,417, 6,409,323, 6,281,912, 6,604,810,6,318,920, 6,488,422, 09/575,109, 6,859,289

The disclosures of these co-pending applications are incorporated hereinby cross-reference.

Performance of a print head such as the above is dictated by its enginecontroller. High-speed printing is a matter of development of both theprint head and its engine controller. A page wide print head enabled bythe above technology needs an engine controller capable of feeding ithigh rates of drop control signals. A typical page layout may contain amixture of images, graphics and text. Because of the page-width natureof the above microelectromechanical print head, each page can be printedat a constant speed to avoid creating visible artifacts. This means thatthe printing speed need not be varied to match the input data rate.Document rasterization and document printing can be decoupled. To ensurethe print head has a constant supply of data, a page should not beprinted until it is fully rasterized. Ideally rasterization should beable to run ahead of the printer when rasterizing simple pages, buyingtime to rasterize more complex pages. The engine controller determinesthe degree to which these functions might be realised.

More speed at the print head depends on development of both print headand its engine controller. The print engine controller architectureneeds to be designed to push large volumes of data to the print head athigh speed.

SUMMARY OF THE INVENTION

In one form the invention resides in a print engine controllercomprising:

a contone image decoder;

a bi-level compression decoder; and

a half-toner/compositor and print head interface.

The print engine controller provides the final steps for producing apage from compressed page data appropriately formatted for it by acomputer or print distribution system, the steps being: expanding thepage image, dithering the contone layer, compositing the black layerover the contone layer, adding infrared tags to the infrared layer, andsending the resultant image to the print head.

The print engine controller preferably uses a high speed serialinterface at which to receive compressed page data. Contone image planesare decoded by a JPEG decoder and they are scaled in thehalftoner/compositor under control of a margin unit. A Group 4 facsimiledecoder decodes the bi-level image plane and it also is scaled in thehalftoner/compositor under control of the margin unit. Optionally aninfrared tag encoder serves to produce an infrared image plane to placeinfrared ink printed tags into a printed page. The halftoner/compositorincludes a dither matrix access unit to supply dither data from thecompressed page data by which to dither the contone image plane.

The invention further includes a print engine controller chip tointerface with an ink drop print head comprising an interface at whichto receive compressed page data, a contone image decoder to decode anycontinuous tone image planes in the received compressed page data, abi-level decoder to decode any bi-level image planes and dither data inthe received compressed page data, a half-toner/compositor to compositeany bi-level image plane over any continuous tone image plane, and aprint head driver to output the composite to a print head.

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1 is a diagram illustrating data flow and the functions performedby the print engine controller.

FIG. 2 shows the print engine controller in the context of the overallprinter system architecture.

FIG. 3 illustrates the print engine controller architecture.

FIG. 4 illustrates the external interfaces to the halftoner/compositorunit (HCU) of FIG. 3.

FIG. 5 is a diagram showing internal circuitry to the HCU of FIG. 4.

FIG. 6 shows a block diagram illustrating the process within the dotmerger unit of FIG. 5.

FIG. 7 shows a diagram illustrating the process within the dotreorganization unit of FIG. 5.

FIG. 8 shows a diagram illustrating the process within the lineloader/format unit (LLFU) of FIG. 5.

FIG. 9 is a diagram showing internal circuitry to generate color data inthe LLFU of FIG. 8.

FIGS. 10 and 11 illustrate components of the LLFU seen in FIG. 9.

DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS

A typically 12 inch print head width is controlled by one or more PECs,as described below, to allow full-bleed printing of both A4 and Letterpages. Six channels of colored ink are the expected maximum in thepresent printing environment, these being:

CMY, for regular color printing.

K, for black text and other black printing.

IR (infrared), for tag-enabled applications.

F (fixative), to enable printing at high speed.

Because the printer is to be capable of fast printing, a fixative willbe required to enable the ink to dry before the next page has completedprinting at higher speeds. Otherwise the pages might bleed on eachother. In lower speed printing environments the fixative will not berequired.

A PEC might be built in a single chip to interface with a print head. Itwill contain four basic levels of functionality:

receiving compressed pages via a serial interface such as IEEE 1394

a print engine for producing a page from a compressed form. The printengine functionality includes expanding the page image, dithering thecontone layer, compositing the black layer over the contone layer,optionally adding infrared tags, and sending the resultant image to theprint head.

a print controller for controlling the print head and stepper motors.

two standard low-speed serial ports for communication with the two QAchips. Note that there must be two ports and not a single port to ensurestrong security during the authentication procedure.

In FIG. 1 is seen the flow of data to send a document from computersystem to printed page. A document is received at 11 and loaded tomemory buffer 12 wherein page layouts may be effected and any requiredobjects might be added. Pages from memory 12 are rasterized at 13 andcompressed at 14 prior to transmission to the print engine controller10. Pages are received as compressed page images within the print enginecontroller 10 into a memory buffer 15, from which they are fed to a pageexpander 16 wherein page images are retrieved. Any requisite ditheringmight be applied to any contone layer at 17. Any black bi-level layermight be composited over the contone layer at 18 together with anyinfrared tags at 19. The composited page data is printed at 20 toproduce page 21.

The print engine controller takes the compressed page image and startsthe page expansion and printing in pipeline fashion. Page expansion andprinting is preferably pipelined because it is impractical to store asizable bi-level CMYK+IR page image in memory.

The first stage of the pipeline expands a JPEG-compressed contone CMYKlayer (see below), expands a Group 4 Fax-compressed bi-level dithermatrix selection map (see below), and expands a Group 4 Fax-compressedbi-level black layer (see below), all in parallel. In parallel withthis, the tag encoder encodes bi-level IR tag data from the compressedpage image. The second stage dithers the contone CMYK layer using adither matrix selected by the dither matrix select map, composites thebi-level black layer over the resulting bi-level K layer and adds the IRlayer to the page. A fixative layer is also generated at each dotposition wherever there is a need in any of C, M, Y, K, or IR channels.The last stage prints the bi-level CMYK+IR data through the print headvia a print head interface (see below).

In FIG. 2 is seen how the print engine controller 10 fits within theoverall printer system architecture. The various components of theprinter system might include

a Print Engine controller (PEC). A PEC chip 10, or chips, is responsiblefor receiving the compressed page images for storage in a memory buffer24, performing the page expansion, black layer compositing and sendingthe dot data to the print head 23. It may also communicate with QA chips25,26 and provides a means of retrieving print head characteristics toensure optimum printing. The PEC is the subject of this specification.

a memory buffer. The memory buffer 24 is for storing the compressed pageimage and for scratch use during the printing of a given page. Theconstruction and working of memory buffers is known to those skilled inthe art and a range of standard chips and techniques for their use mightbe utilized in use of the PEC of the invention.

a master QA chip. The master chip 25 is matched to replaceable inkcartridge QA chips 26. The construction and working of QA units is knownto those skilled in the art and a range of known QA processes might beutilized in use of the PEC of the invention. For example, a QA chip isdescribed in co-pending United States patent applications: Our DocketUSSN Number Our Title 09/517,539 AUTH01 Validation Protocol and System6,566,858 AUTH02 Circuit for Protecting Chips Against IDD FluctuationAttacks 6,331,946 AUTH04 Method for Protecting On-Chip Memory (Flash andRAM) 6,246,970 AUTH05 Method for Making a Chip Tamper-Resistant6,442,525 AUTH06 A system for authenticating physical objects 09/517,384AUTH07 Validation Protocol and System 09/505,951 AUTH08 ValidationProtocol and System 6,374,354 AUTH09 Consumable Authentication Protocoland System 09/517,608 AUTH10 Consumable Authentication Protocol andSystem 09/505,147 AUTH11 Consumable Authentication Protocol and System09/505,952 AUTH12 Unauthorized Modification of Values Stored in FlashMemory 6,334,190 AUTH13 A System for the Manipulation of Secure Data6,745,331 AUTH14 An Authentication Chip with Protection from PowerSupply Attacks 09/517,541 AUTH15 Shielding Manipulations of Secret Data

QA chip communication may be best included within the overallfunctionality of the PEC chip since it has a role in the expansion ofthe image as well as running the physical print head. By locating QAchip communication there it can be ensured that there is enough ink toprint the page. Preferably the QA embedded in the print head assembly isimplemented using an authentication chip. Since it is a master QA chip,it only contains authentication keys, and does not contain user-data.However, it must match the ink cartridge's QA chip. The QA chip in theink cartridge contains information required for maintaining the bestpossible print quality, and is implemented using an authentication chip.

Preferably a 64 MBit (8 MByte) memory buffer is used to store thecompressed page image. While one page is being written to the bufferanother is being read (double buffering). In addition, the PEC uses thememory to buffer the calculated dot information during the printing of apage. During the printing of page N, the buffer is used for:

Reading compressed page N

Reading and writing the bi-level dot information for page N

Writing compressed page N+1

Preferably a PEC chip will incorporate a simple micro-controller CPUcore 35 to perform the following functions:

perform QA chip authentication protocols via serial interface 36 betweenprint pages

run the stepper motor via a parallel interface 91 during a print (thestepper motor requires a 5 KHz process)

synchronize the various portions of the PEC chip during a print

provide a means of interfacing with external data requests (programmingregisters etc.)

provide a means of interfacing with print head segment low-speed datarequests (such as reading the characterization vectors and writing pulseprofiles)

provide a means of writing the portrait and landscape tag structures toexternal DRAM

Since all of the image processing is performed by dedicated hardware,the CPU does not have to process pixels. As a result, the CPU can beextremely simple. A wide variety of CPU known cores are suitable: it canbe any processor core with sufficient processing power to perform therequired calculations and control functions fast enough. An example of asuitable core is a Philips 8051 micro-controller running at about 1 MHz.Associated with the CPU core 35 may be a program ROM and a small programscratch RAM. The CPU communicates with the other units within the PECchip via memory-mapped I/O. Particular address ranges may map toparticular units, and within each range, to particular registers withinthat particular unit. This includes the serial 36 and parallel 91interfaces. A small program flash ROM may be incorporated into the PECchip. Its size depends on the CPU chosen, but should not be more than 8KB. Likewise, a small scratch RAM area can be incorporated into the PECchip. Since the program code does not have to manipulate images, thereis no need for a large scratch area. The RAM size depends on the CPUchosen (e.g. stack mechanisms, subroutine calling conventions, registersizes etc.), but should not be more than about 2 KB.

A PEC chip using the above referenced segment based page wide print headcan reproduce black at a full dot resolution (typically 1600 dpi), butreproduces contone color at a somewhat lower resolution usinghalftoning. The page description is therefore divided into a blackbi-level layer and a contone layer. The black bi-level layer is definedto composite over the contone layer. The black bi-level layer consistsof a bitmap containing a 1-bit opacity for each pixel. This black layermatte has a resolution that is an integer factor of the printer's dotresolution. The highest supported resolution is 1600 dpi, i.e. theprinter's full dot resolution. The contone layer consists of a bitmapcontaining a 32-bit CMYK color for each pixel, where K is optional. Thiscontone image has a resolution that is an integer factor of theprinter's dot resolution. The highest supported resolution is 320 ppiover 12 inches for a single PEC, i.e. one-fifth the printer's dotresolution. For higher contone resolutions multiple PECs are required,with each PEC producing an strip of the output page. The contoneresolution is also typically an integer factor of the black bi-levelresolution, to simplify calculations in the RIPs. This is not arequirement, however. The black bi-level layer and the contone layer areboth in compressed form for efficient storage in the printer's internalmemory.

In FIG. 3 is seen the print engine architecture. The print engine's pageexpansion and printing pipeline consists of a high speed serialinterface 27 (such as a standard IEEE 1394 interface), a standard JPEGdecoder 28, a standard Group 4 Fax decoder, a customhalftoner/compositor unit 29, a custom tag encoder 30, a lineloader/formatter unit 31, and a custom interface 32 to the print head33. The decoders 28,88 and encoder 30 are buffered to thehalftoner/compositor 29. The tag encoder 30 establishes an infrared tagor tags to a page according to protocols dependent on what uses might bemade of the page and the actual content of a tag is not the subject ofthe present invention.

The print engine works in a double buffered way. One page is loaded intoDRAM 34 via DRAM interface 89 and data bus 90 from the high speed serialinterface 27 while the previously loaded page is read from DRAM 34 andpassed through the print engine pipeline. Once the page has finishedprinting, then the page just loaded becomes the page being printed, anda new page is loaded via the high-speed serial interface 27. At thefirst stage the pipeline expands any JPEG-compressed contone (CMYK)layer, and expands any of two Group 4 Fax-compressed bi-level datastreams. The two streams are the black layer (although the PEC isactually color agnostic and this bi-level layer can be directed to anyof the output inks), and a matte for selecting between dither matricesfor contone dithering (see below). At the second stage, in parallel withthe first, is encoded any tags for later rendering in either IR or blackink. Finally the third stage dithers the contone layer, and compositesposition tags and the bi-level spot1 layer over the resulting bi-leveldithered layer. The data stream is ideally adjusted to create smoothtransitions across overlapping segments in the print head and ideally itis adjusted to compensate for dead nozzles in the print head. Up to 6channels of bi-level data are produced from this stage. Note that notall 6 channels may be present on the print head. For example, the printhead may be CMY only, with K pushed into the CMY channels and IRignored. Alternatively, the position tags may be printed in K if IR inkis not available (or for testing purposes). The resultant bi-levelCMYK-IR dot-data is buffered and formatted for printing on the printhead 33 via a set of line buffers (see below). The majority of theseline buffers might be ideally stored on the off-chip DRAM 34. The finalstage prints the 6 channels of bi-level dot data via the print headinterface 32.

Compression is used in a printing system that employs the PEC. This isto reduce bandwidth requirements between a host and PEC, as well as toreduce memory requirements for page storage. At 267 ppi, a Letter pageof contone CMYK data has a size of 25 MB. Using lossy contonecompression algorithms such as JPEG (see below), contone images compresswith a ratio up to 10:1 without noticeable loss of quality, giving acompressed page size of 2.5 MB. At 800 dpi, a Letter page of bi-leveldata has a size of 7 MB. Coherent data such as text compresses verywell. Using lossless bi-level compression algorithms such as Group 4Facsimile (see below), ten-point text compresses with a ratio of about10:1, giving a compressed page size of 0.8 MB. Once dithered, a page ofCMYK contone image data consists of 114 MB of bi-level data. Thetwo-layer compressed page image format described below exploits therelative strengths of lossy JPEG contone image compression and losslessbi-level text compression. The format is compact enough to bestorage-efficient, and simple enough to allow straightforward real-timeexpansion during printing. Since text and images normally don't overlap,the normal worst-case page image size is 2.5 MB (i.e. image only), whilethe normal best-case page image size is 0.8 MB (i.e. text only). Theabsolute worst-case page image size is 3.3 MB (i.e. text over image).Assuming a quarter of an average page contains images, the average pageimage size is 1.2 MB.

A Group 3 Facsimile compression algorithm (see ANSI/EIA 538-1988,Facsimile Coding Schemes and Coding Control Functions for Group 4Facsimile Equipment, August 1988) can be used to losslessly compressesbi-level data for transmission over slow and noisy telephone lines. Thebi-level data represents scanned black text and graphics on a whitebackground, and the algorithm is tuned for this class of images (it isexplicitly not tuned, for example, for halftoned bi-level images). TheID Group 3 algorithm runlength-encodes each scanline and thenHuffman-encodes the resulting runlengths. Runlengths in the range 0 to63 are coded with terminating codes. Runlengths in the range 64 to 2623are coded with make-up codes, each representing a multiple of 64,followed by a terminating code. Runlengths exceeding 2623 are coded withmultiple make-up codes followed by a terminating code. The Huffmantables are fixed, but are separately tuned for black and white runs(except for make-up codes above 1728, which are common). When possible,the 2D Group 3 algorithm encodes a scanline as a set of short edgedeltas (0, ±1, ±2, ±3) with reference to the previous scanline. Thedelta symbols are entropy-encoded (so that the zero delta symbol is onlyone bit long etc.) Edges within a 2D-encoded line that can't bedelta-encoded are runlength-encoded, and are identified by a prefix. 1D-and 2D-encoded lines are marked differently. 1D-encoded lines aregenerated at regular intervals, whether actually required or not, toensure that the decoder can recover from line noise with minimal imagedegradation. 2D Group 3 achieves compression ratios of up to 6:1 (seeUrban, S. J., “Review of standards for electronic imaging for facsimilesystems”, Journal of Electronic Imaging, Vol. 1(1), January 1992, pp.5-21).

A Group 4 Facsimile algorithm (see ANSI/EIA 538-1988, Facsimile CodingSchemes and Coding Control Functions for Group 4 Facsimile Equipment,August 1988) losslessly compresses bi-level data for transmission overerror-free communications lines (i.e. the lines are truly error-free, orerror-correction is done at a lower protocol level). The Group 4algorithm is based on the 2D Group 3 algorithm, with the essentialmodification that since transmission is assumed to be error-free,1D-encoded lines are no longer generated at regular intervals as an aidto error-recovery. Group 4 achieves compression ratios ranging from 20:1to 60:1 for the CCITT set of test images. The design goals andperformance of the Group 4 compression algorithm qualify it as acompression algorithm for the bi-level layers. However, its Huffmantables are tuned to a lower scanning resolution (100-400 dpi), and itencodes runlengths exceeding 2623 awkwardly. At 800 dpi, our maximumrunlength is currently 6400. Although a Group 4 decoder core would beavailable for use in PEC, it might not handle runlengths exceeding thosenormally encountered in 400 dpi facsimile applications, and so wouldrequire modification. The (typically 1600 dpi) black layer is losslesslycompressed using G4Fax at a typical compression ratio exceeding 10:1. A(typically 320 dpi) dither matrix select layer, which matches thecontone color layer, is losslessly compressed using G4Fax at a typicalcompression ratio exceeding 50:1.

The Group 4 Fax (G4 Fax) decoder is responsible for decompressingbi-level data. Bi-level data is limited to a single spot color(typically black for text and line graphics), and a dither matrix selectbit-map for use in subsequent dithering of the contone data(decompressed by the JPEG decoder). The input to the G4 Fax decoder is 2planes of bi-level data, read from the external DRAM. The output of theG4 Fax decoder is 2 planes of decompressed bi-level data. Thedecompressed bi-level data is sent to the Halftoner/Compositor Unit(HCU) for the next stage in the printing pipeline. Two bi-level buffersprovides the means for transferring the bi-level data between the G4 Faxdecoder and the HCU. Each decompressed bi-level layer is output to twoline buffers. Each buffer is capable of holding a full 12 inch line ofdots at the expected maximum resolution. Having two line buffers allowsone line to be read by the HCU while the other line is being written toby the G4 Fax decoder. This is important because a single bi-level lineis typically less than 1600 dpi, and must therefore be expanded in boththe dot and line dimensions. If the buffering were less than a fullline, the G4 Fax decoder would have to decode the same line multipletimes—once for each output 600 dpi dotline.

Spot color 1 is designed to allow high resolution dot data for a singlecolor plane of the output image. While the contone layers provideadequate resolution for images, spot color 1 is targeted at applicationssuch as text and line graphics (typically black). When used as text andline graphics, the typical compression ratio exceeds 10:1. Spot color 1allows variable resolution up to 1600 dpi for maximum print quality.Each of the two line buffers is therefore total 2400 bytes (12inches×1600 dpi=19,200 bits).

The resolution of the dither matrix select map should ideally match thecontone resolution. Consequently each of the two line buffers istherefore 480 bytes (3840 bits), capable of storing 12 inches at 320dpi. When the map matches the contone resolution, the typicalcompression ratio exceeds 50:1.

In order to provide support for:

800 dpi spot color 1 layer (typically black)

320 dpi dither matrix select layer

the decompression bandwidth requirements are 9.05 MB/sec for 1 page persecond performance (regardless of whether the page width is 12 inches or8.5 inches), and 20 MB/sec and 14.2 MB/sec for 12 inch and 8.5 inch pagewidths respectively during maximum printer speed performance (30,000lines per second). Given that the decompressed data is output to a linebuffer, the G4 Fax decoder can readily decompress a line from each ofthe outputs one at a time.

The G4 Fax decoder is fed directly from the main memory via the DRAMinterface. The amount of compression determines the bandwidthrequirements to the external DRAM. Since G4 Fax is lossless, thecomplexity of the image impacts on the amount of data and hence thebandwidth. typically an 800 dpi black text/graphics layer exceeds 10:1compression, so the bandwidth required to print 1 page per second is0.78 MB/sec. Similarly, a typical 320 dpi dither select matrixcompresses at more than 50:1, resulting in a 0.025 MB/sec bandwidth. Thefastest printing speed configuration of 320 dpi for dither select matrixand 800 dpi for spot color 1 requires bandwidth of 1.72 MB/sec and 0.056MB/sec respectively. A total bandwidth of 2 MB/sec should therefore bemore than enough for the DRAM bandwidth.

The G4 Fax decoding functionality is implemented by means of a G4 FaxDecoder core. A wide variety of G4Fax Decoder cores are suitable: it canbe any core with sufficient processing power to perform the requiredcalculations and control functions fast enough. It must be capable ofhandling runlengths exceeding those normally encountered in 400 dpifacsimile applications, and so may require modification.

A JPEG compression algorithm (see ISO/IEC 19018-1:1994, Informationtechnology—Digital compression and coding of continuous-tone stillimages: Requirements and guidelines, 1994) lossily compresses a contoneimage at a specified quality level. It introduces imperceptible imagedegradation at compression ratios below 5:1, and negligible imagedegradation at compression ratios below 10:1 (see Wallace, G. K., “TheJPEG Still Picture Compression Standard”, Communications of the ACM,Vol. 34, No. 4, April 1991, pp. 30-44). JPEG typically first transformsthe image into a color space that separates luminance and chrominanceinto separate color channels. This allows the chrominance channels to besubsampled without appreciable loss because of the human visual system'srelatively greater sensitivity to luminance than chrominance. After thisfirst step, each color channel is compressed separately. The image isdivided into 8×8 pixel blocks. Each block is then transformed into thefrequency domain via a discrete cosine transform (DCT). Thistransformation has the effect of concentrating image energy inrelatively lower-frequency coefficients, which allows higher-frequencycoefficients to be more crudely quantized. This quantization is theprincipal source of compression in JPEG. Further compression is achievedby ordering coefficients by frequency to maximize the likelihood ofadjacent zero coefficients, and then runlength-encoding runs of zeroes.Finally, the runlengths and non-zero frequency coefficients are entropycoded. Decompression is the inverse process of compression.

The CMYK (or CMY) contone layer is compressed to a planar color JPEGbytestream. If luminance/chrominance separation is deemed necessary,either for the purposes of table sharing or for chrominance subsampling,then CMYK is converted to YCrCb and Cr and Cb are duly subsampled. TheJPEG bytestream is complete and self-contained. It contains all datarequired for decompression, including quantization and Huffman tables.

The JPEG decoder is responsible for performing the on-the-flydecompression of the contone data layer. The input to the JPEG decoderis up to 4 planes of contone data. This will typically be 3 planes,representing a CMY contone image, or 4 planes representing a CMYKcontone image. Each color plane can be in a different resolution,although typically all color planes will be the same resolution. Thecontone layers are read from the external DRAM. The output of the JPEGdecoder is the decompressed contone data, separated into planes. Thedecompressed contone image is sent to the halftoner/compositor unit(HCU) 29 for the next stage in the printing pipeline. The 4-planecontone buffer provides the means for transferring the contone databetween the JPEG decoder and the HCU 29.

Each color plane of the decompressed contone data is output to a set oftwo line buffers (see below). Each line buffer is 3840 bytes, and istherefore capable of holding 12 inches of a single color plane's pixelsat 320 ppi. The line buffering allows one line buffer to be read by theHCU while the other line buffer is being written to by the JPEG decoder.This is important because a single contone line is typically less than1600 ppi, and must therefore be expanded in both the dot and linedimensions. If the buffering were less than a full line, the JPEGdecoder would have to decode the same line multiple times—once for eachoutput 600 dpi dotline. Although a variety of resolutions is supported,there is a tradeoff between the resolution and available bandwidth. Asresolution and number of colors increase, bandwidth requirements alsoincrease. In addition, the number of segments being targeted by the PECchip also affects the bandwidth and possible resolutions. Note thatsince the contone image is processed in a planar format, each colorplane can be stored at a different resolution (for example CMY may be ahigher resolution than the K plane). The highest supported contoneresolution is 1600 ppi (matching the printer's full dot resolution).However there is only enough output line buffer memory to hold enoughcontone pixels for a 320 ppi line of length 12 inches. If the full 12inches of output was required at higher contone resolution, multiple PECchips would be required, although it should be noted that the finaloutput on the printer will still only be bi-level. With support for 4colors at 320 ppi, the decompression output bandwidth requirements are40 MB/sec for 1 page per second performance (regardless of whether thepage width is 12 inches or 8.5 inches), and 88 MB/sec and 64 MB/sec for12 inch and 8.5 inch page widths respectively during maximum printerspeed performance (30,000 lines per second).

The JPEG decoder is fed directly from the main memory via the DRAMinterface. The amount of compression determines the bandwidthrequirements to the external DRAM. As the level of compressionincreases, the bandwidth decreases, but the quality of the final outputimage can also decrease. The DRAM bandwidth for a single color plane canbe readily calculated by applying the compression factor to the outputbandwidth. For example, a single color plane at 320 ppi with acompression factor of 10:1 requires 1 MB/sec access to DRAM to produce asingle page per second.

The JPEG functionality is implemented by means of a JPEG core. A widevariety of JPEG cores are suitable: it can be any JPEG core withsufficient processing power to perform the required calculations andcontrol functions fast enough. For example, the BTG X-Match core hasdecompression speeds up to 140 MBytes/sec, which allows decompression of4 color planes at contone resolutions up to 400 ppi for the maximumprinter speed (30,000 lines at 1600 dpi per second), and 800 ppi for 1page/sec printer speed. Note that the core needs to only supportdecompression, reducing the requirements that are imposed by moregeneralized JPEG compression/decompression cores. The size of the coreis expected to be no more than 100,000 gates. Given that thedecompressed data is output to a line buffer, the JPEG decoder canreadily decompress an entire line for each of the color planes one at atime, thus saving on context switching during a line and simplifying thecontrol of the JPEG decoder. 4 contexts must be kept (1 context for eachcolor plane), and includes current address in the external DRAM as wellas appropriate JPEG decoding parameters

In FIG. 4 the halftoner/compositor unit (HCU) 29 combines the functionsof halftoning the contone (typically CMYK) layer to a bi-level versionof the same, and compositing the spot1 bi-level layer over theappropriate halftoned contone layer(s). If there is no K ink in theprinter, the HCU 29 is able to map K to CMY dots as appropriate. It alsoselects between two dither matrices on a pixel by pixel basis, based onthe corresponding value in the dither matrix select map. The input tothe HCU 29 is an expanded contone layer (from the JPEG decoder unit)through buffer 37, an expanded bi-level spot1 layer through buffer 38,an expanded dither-matrix-select bitmap at typically the same resolutionas the contone layer through buffer 39, and tag data at full dotresolution through buffer 40. The HCU 29 uses up to two dither matrices,read from the external DRAM 34. The output from the HCU 29 to the lineloader/format unit (LLFU) at 41 is a set of printer resolution bi-levelimage lines in up to 6 color planes. Typically, the contone layer isCMYK or CMY, and the bi-level spot1 layer is K.

In FIG. 5 is seen the HCU in greater detail. Once started, the HCUproceeds until it detects an end-of-page condition, or until it isexplicitly stopped via its control register. The first task of the HCUis to scale, in the respective scale units such as the scale unit 43,all data, received in the buffer planes such as 42, to printerresolution both horizontally and vertically.

The scale unit provides a means of scaling contone or bi-level data toprinter resolution both horizontally and vertically. Scaling is achievedby replicating a data value an integer number of times in bothdimensions. Processes by which to scale data will be familiar to thoseskilled in the art.

Two control bits are provided to the scale unit 43 by the margin unit57: advance dot and advance line. The advance dot bit allows the statemachine to generate multiple instances of the same dot data (useful forpage margins and creating dot data for overlapping segments in the printhead). The advance line bit allows the state machine to control when aparticular line of dots has been finished, thereby allowing truncationof data according to printer margins. It also saves the scale unit fromrequiring special end-of-line logic. The input to the scale unit is afull line buffer. The line is used scale factor times to effect verticalup-scaling via line replication, and within each line, each value isused scale factor times to effect horizontal up-scaling via pixelreplication. Once the input line has been used scale factor times (theadvance line bit has been set scale factor times), the input bufferselect bit of the address is toggled (double buffering). The logic forthe scale unit is the same for the 8-bit and 1-bit case, since the scaleunit only generates addresses.

Since each of the contone layers can be a different resolution, they arescaled independently. The bi-level spot1 layer at buffer 45 and thedither matrix select layer at buffer 46 also need to be scaled. Thebi-level tag data at buffer 47 is established at the correct resolutionand does not need to be scaled. The scaled-up dither matrix select bitis used by the dither matrix access unit 48 to select a single 8-bitvalue from the two dither matrices. The 8-bit value is output to the 4comparators 44, and 49 to 51, which simply compare it to the specific8-bit contone value. The generation of an actual dither matrix isdependent on the structure of the print head and the general processesby which to generate one will be familiar to those skilled in the art.If the contone value is greater than or equal to the 8-bit dither matrixvalue a 1 is output. If not, then a 0 is output. These bits are then allANDed at 52 to 56 with an inPage bit from the margin unit 57 (whether ornot the particular dot is inside the printable area of the page). Thefinal stage in the HCU is the compositing stage. For each of the 6output layers there is a single dot merger unit, such as unit 58, eachwith 6 inputs. The single output bit from each dot merger unit is acombination of any or all of the input bits. This allows the spot colorto be placed in any output color plane (including infrared for testingpurposes), black to be merged into cyan, magenta and yellow (if no blackink is present in the print head), and tag dot data to be placed in avisible plane. A fixative color plane can also be readily generated. Thedot reorg unit (DRU) 59 is responsible for taking the generated dotstream for a given color plane and organizing it into 32-bit quantitiesso that the output is in segment order, and in dot order withinsegments. Minimal reordering is required due to the fact that dots foroverlapping segments are not generated in segment order.

Two control bits are provided to the scale units by the margin unit 57:advance dot and advance line. The advance dot bit allows the statemachine to generate multiple instances of the same dot data (useful forpage margins and creating dot data for overlapping segments in the printhead). The advance line bit allows the state machine to control when aparticular line of dots has been finished, thereby allowing truncationof data according to printer margins. It also saves the scale unit fromrequiring special end-of-line logic.

The comparator unit contains a simple 8-bit “greater-than-or-equal”comparator. It is used to determine whether the 8-bit contone value isgreater than or equal to the 8-bit dither matrix value. As such, thecomparator unit takes two 8-bit inputs and produces a single 1-bitoutput.

In FIG. 6 is seen more detail of the dot merger unit. It provides ameans of mapping the bi-level dithered data, the spot1 color, and thetag data to output inks in the actual print head. Each dot merger unittakes 6 1-bit inputs and produces a single bit output that representsthe output dot for that color plane. The output bit at 60 is acombination of any or all of the input bits. This allows the spot colorto be placed in any output color plane (including infrared for testingpurposes), black to be merged into cyan, magenta and yellow (in the caseof no black ink in the print head), and tag dot data to be placed in avisible plane. An output for fixative can readily be generated by simplycombining all of the input bits. The dot merger unit contains a 6-bitColorMask register 61 that is used as a mask against the 6 input bits.Each of the input bits is ANDed with the corresponding ColorMaskregister bit, and the resultant 6 bits are then ORed together to formthe final output bit.

In FIG. 7 is seen the dot reorg unit (DRU) which is responsible fortaking the generated dot stream for a given color plane and organizingit into 32-bit quantities so that the output is in segment order, and indot order within segments. Minimal reordering is required due to thefact that dots for overlapping segments are not generated in segmentorder. The DRU contains a 32-bit shift register, a regular 32-bitregister, and a regular 16-bit register. A 5-bit counter keeps track ofthe number of bits processed so far. The dot advance signal from thedither matrix access unit (DMAU) is used to instruct the DRU as to whichbits should be output.

In FIG. 7 register(A) 62 is clocked every cycle. It contains the 32 mostrecent dots produced by the dot merger unit (DMU). The full 32-bit valueis copied to register(B) 63 every 32 cycles by means of a WriteEnablesignal produced by the DRU state machine 64 via a simple 5-bit counter.The 16 odd bits (bits 1, 3, 5, 7 etc.) from register(B) 63 are copied toregister(C) 65 with the same WriteEnable pulse. A 32-bit multiplexor 66then selects between the following 3 outputs based upon 2 bits from thestate machine: the full 32 bits from register B

A 32-bit value made up from the 16 even bits of register A (bits 0, 2,4, 6 etc.) and the 16 even bits of register B. The 16 even bits fromregister A form bits 0 to 15, while the 16 even bits from register Bform bits 16-31.

A 32-bit value made up from the 16 odd bits of register B (bits 1, 3, 5,7 etc.) and the 16 bits of register C. The bits of register C form bits0 to 15, while the odd bits from register B form bits 16-13.

The state machine for the DRU can be seen in Table 1. It starts in state0. It changes state every 32 cycles. During the 32 cycles a singlenoOverlap bit collects the AND of all the dot advance bits for those 32cycles (noOverlap=dot advance for cycle 0, and noOverlap=noOverlap ANDdot advance for cycles 1 to 31). TABLE 1 State machine for DRU outputnext state NoOverlap Output Valid Comment state 0 X B 0 Startup state 11 1 B 1 Regular non-overlap 1 1 0 B 1 A contains first 2 overlap 2 XEven A, 1 A contains second 3 even B overlap B contains first overlap

overlap 1 B contains second overlap

The margin unit (MU) 57, in FIG. 5, is responsible for turning advancedot and advance line signals from the dither matrix access unit (DMAU)48 into general control signals based on the page margins of the currentpage. It is also responsible for generating the end of page condition.The MU keeps a counter of dot and line across the page. Both are set to0 at the beginning of the page. The dot counter is advanced by 1 eachtime the MU receives a dot advance signal from the DMAU. When the MUreceives a line advance signal from the DMAU, the line counter isincremented and the dot counter is reset to 0.

Each cycle, the current line and dot values are compared to the marginsof the page, and appropriate output dot advance, line advance and withinmargin signals are given based on these margins. The DMAU contains theonly substantial memory requirements for the HCU.

In FIG. 8 is seen the line loader/format unit (LLFU). It receives dotinformation from the HCU, loads the dots for a given print line intoappropriate buffer storage (some on chip, and some in external DRAM 34)and formats them into the order required for the print head. A highlevel block diagram of the LLFU in terms of its external interface isshown in FIG. 9. The input 67 to the LLFU is a set of 6 32-bit words anda Data Valid bit, all generated by the HCU. The output 68 is a set of 90bits representing a maximum of 15 print head segments of 6 colors. Notall the output bits may be valid, depending on how many colors areactually used in the print head.

The physical placement of firing nozzles on the print head referencedabove, nozzles in two offset rows, means that odd and even dots of thesame color are for two different lines. The even dots are for line L,and the odd dots are for line L-2. In addition, there is a number oflines between the dots of one color and the dots of another. Since the 6color planes for the same dot position are calculated at one time by theHCU, there is a need to delay the dot data for each of the color planesuntil the same dot is positioned under the appropriate color nozzle

The size of each buffer line depends on the width of the print head.Since a single PEC generates dots for up to 15 print head segments, asingle odd or even buffer line is therefore 15 sets of 640 dots, for atotal of 9600 bits (1200 bytes). For example, the buffers required forcolor 6 odd dots totals almost 45 KBytes.

The entire set of requisite buffers might be provided on the PEC chipwhen manufacturing techniques are capable. Otherwise, the buffers forcolors 2 onward may be stored in external DRAM. This enables the PEC tobe valid even though the distance between color planes may change in thefuture. It is trivial to keep the even dots for color 1 on PEC, sinceeverything is printed relative to that particular dot line (noadditional line buffers are needed). In addition, the 2 half-linesrequired for buffering color 1 odd dots saves substantial DRAMbandwidth. The various line buffers (on chip and in DRAM) need to bepre-loaded with all 0s before the page is printed so that it has cleanedges. The end of the page is generated automatically by the HCU so itwill have a clean edge.

In FIG. 10 is seen a block diagram for Color N OESplit (see Oesplit 70of FIG. 9), and the block diagram for each of the two buffers E and F,71,72 in FIG. 9 can be found in FIGS. 10 and 11. Buffer EF is a doublebuffered mechanism for transferring data to the print head interface(PHI) 32 in FIG. 3. Buffers E and F therefore have identical structures.During the processing of a line of dots, one of the two buffers iswritten to while the other is being read from. The two buffers arelogically swapped upon receipt of the line-sync signal from the PHI.Both buffers E and F are composed of 6 sub-buffers, 1 sub-buffer percolor, as shown in FIG. 11, the color 1 sub-buffer numbered 73. The sizeof each sub-buffer is 2400 bytes, enough to hold 15 segments at 1280dots per segment. The memory is accessed 32-bits at a time, so there are600 addresses for each sub-buffer (requiring 10 bits of address). Allthe even dots are placed before the odd dots in each color's sub-buffer.If there is any unused space (for printing to fewer than 15 segments) itis located at the end of each color's sub-buffer. The amount of memoryactually used from each sub-buffer is directly related to the number ofsegments actually addressed by the PEC. For a 15 segment print headthere are 1200 bytes of even dots followed by 1200 bytes of odd dots,with no unused space. The number of sub-buffers gainfully used isdirectly related to the number of colors used in the print head. Themaximum number of colors supported is 6.

The addressing decoding circuitry for each of buffers E and F is suchthat in a given cycle, a single 32-bit access can be made to all 6sub-buffers—either a read from all 6 or a write to one of the 6. Onlyone bit of the 32-bits read from each color buffer is selected, for atotal of 6 output bits. The process is shown in FIG. 11. 15 bits ofaddress allow the reading of a particular bit by means of 10-bits ofaddress being used to select 32 bits, and 5-bits of address choose 1-bitfrom those 32. Since all color sub-buffers share this logic, a single15-bit address gives a total of 6 bits out, one bit per color. Eachsub-buffer 73 to 78 has its own WriteEnable line, to allow a single32-bit value to be written to a particular color buffer in a givencycle. The individual WriteEnables are generated by ANDing the singleWriteEnable input with the decoded form of ColorSelect. The 32-bits ofDataIn on line 79 are shared, since only one buffer will actually clockthe data in.

Address generation for reading from buffers E and F is straightforward.Each cycle generates a bit address that is used to fetch 6 bitsrepresenting 1-bit per color for a particular segment. By adding 640 tothe current bit address, we advance to the next segment's equivalentdot. We add 640 (not 1280) since the odd and even dots are separated inthe buffer. We do this NumSegments times to retrieve the datarepresenting the even dots, and transfer those bits to the PHI. WhenNumSegments=15, the number of bits is 90 (15×6 bits). The process isthen repeated for the odd dots. This entire even/odd bit generationprocess is repeated 640 times, incrementing the start address each time.Thus all dot values are transferred to the PHI in the order required bythe print head in 640×2×NumSegments cycles. When NumSegments=15, thenumber of cycles is 19,200 cycles. Note that regardless of the number ofcolors actually used in the print head, 6 bits are produced in a givenread cycle (one bit from each color's buffer).

In addition, we generate the TWriteEnable control signal for writing tothe 90-bit Transfer register 90 in FIG. 9. Since the LLFU starts beforethe PHI, we must transfer the first value before the Advance pulse fromthe PHI. We must also generate the next value in readiness for the firstAdvance pulse. The solution is to transfer the first value to theTransfer register after NumSegments cycles, and then to stallNumSegments cycles later, waiting for the Advance pulse to start thenext NumSegments cycle group. Once the first Advance pulse arrives, theLLFU is synchronized to the PHI.

The read process for a single dotline is shown in the followingpseudocode:

DoneFirst=FALSE

WantToXfer=FALSE

For DotInSegment0=0 to 1279

-   -   If (DotInSegment0:bit0==0)        -   CurrAdr=DotInSegment0 (high bits) (puts in range 0 to 639)    -   EndIf    -   XfersRemaining=NumSegments    -   Do        -   WantToXfer=(XfersRemaining==0)        -   TWriteEnable=(WantToXfer AND NOT DoneFirst) OR PHI:ADVANCE        -   DoneFirst=DoneFirst OR TWriteEnable        -   Stall=WantToXfer AND (NOT TWriteEnable)        -   SWriteEnable=NOT(Stall)        -   If (SWriteEnable)            -   Shift Register=Fetch 6 bits from EFSense[ReadBuffer]:                CurrAdr            -   CurrAdr=CurrAdr+640            -   XfersRemaining=XfersRemaining−1        -   EndIf    -   Until (TWriteEnable)

EndFor

Wait until BufferEF Write process has finished

EFSense=NOT (EFSense)

While read process is transferring data from E or F to the PHI, a writeprocess is preparing the next dot-line in the other buffer.

The data being written to E or F is color 1 data generated by the HCU,and color 2-6 data from buffer D (supplied from DRAM). Color 1 data iswritten to EF whenever the HCU's OutputValid flag is set, and color 2-6data is written during other times from register C.

Buffer OE₁ 81 in FIG. 9 is a 32-bit register used to hold a singleHCU-generated set of contiguous 32 dots for color 1. While the dots arecontiguous on the page, the odd and even dots are printed at differenttimes.

Buffer AB 82 is a double buffered mechanism for delaying odd dot datafor color 1 by 2 dotlines. Buffers A and B therefore have identicalstructures. During the processing of a line of dots, one of the twobuffers is read from and then written to. The two buffers are logicallyswapped after the entire dot line has been processed. A single bit flagABSense determines which of the two buffers are read from and writtento.

The HCU provides 32-bits of color 1 data whenever the output validcontrol flag is set, which is every 32 cycles after the first flag hasbeen sent for the line. The 32 bits define a contiguous set of 32 dotsfor a single dot line −16 even dots (bits 0, 2, 4 etc.), and 16 odd dots(bits 1, 3, 5 etc.). The output valid control flag is used as aWriteEnable control for the OE₁ register 81. We process the HCU dataevery 2 OutputValid signals. The 16 even bits of HCU color 1 data arecombined with the 16 even bits of register OE₁ to make 32-bits of evencolor 1 data. Similarly, the 16 odd bits of HCU color 1 data arecombined with the 16 odd bits of register OE₁ to make 32-bits of oddcolor 1 data. Upon receipt of the first OutputValid signal of the groupof two, we read buffer AB to transfer the odd data to color 1, 73 inFIG. 11 within buffer EF. Upon receipt of the second OutputValid signalof the group of two, we write the 32-bits of odd data to the samelocation in buffer AB that we read from previously, and we write the32-bits of even data to color 1 within buffer EF.

The HCU provides 32 bits of data per color plane whenever theOutputValid control flag is set. This occurs every 32 cycles exceptduring certain startup times. The 32 bits define a contiguous set of 32dots for a single dot line −16 even dots (bits 0, 2, 4 etc.), and 16 odddots (bits 1, 3, 5 etc.).

While buffer OE₁ (83 in FIG. 10) is used to store a single 32-bit valuefor color 1, buffers OE₂ to OE₆ are used to store a single 32-bit valuefor colors 2 to 6 respectively. Just as the data for color 1 is splitinto 32-bits representing color 1 odd dots and 32-bits representingcolor 1 even dots every 64 cycles (once every two OutputValid flags),the remaining color planes are also split into even and odd dots.

However, instead of being written directly to buffer EF, the dot data isdelayed by a number of lines, and is written out to DRAM via buffer CD(84 in FIG. 9). While the dots for a given line are written to DRAM, thedots for a previous line are read from DRAM and written to buffer EF(71,72). This process must be done interleaved with the process writingcolor 1 to buffer EF.

Every time an OutputValid flag is received from the HCU on line 85 inFIG. 10, the 32-bits of color N data are written to buffer OE_(N) (83).Every second OutputValid flag, the combined 64-bit value is written tocolor buffer N (86). This happens in parallel for all color planes 2-6.Color Buffer N (86) contains 40 sets of 64-bits (320 bytes) to enablethe dots for two complete segments to be stored. This allows a completesegment generation time (20×64=1280 cycles) for the previous segment'sdata (both odd and even dots) to be written out to DRAM. Addressgeneration for writing is straightforward. The ColorNWriteEnable signalon line 87 is given every second OutputValid flag. The address starts at0, and increments every second OutputValid flag until 39. Instead ofadvancing to 40, the address is reset to 0, thus providing thedouble-buffering scheme. This works so long as the reading does notoccur during the OutputValid flag, and that the previous segment's datacan be written to DRAM in the time it takes to generate a singlesegment's data. The process is shown in the following pseudocode:

adr=0

firstEncountered=0

While (NOT AdvanceLine)

-   -   If (HCU_OutputValid) AND (firstEncountered))        -   ColorNWriteEnable=TRUE        -   ColorNAdr=adr        -   If (adr==39)            -   adr=0        -   Else            -   adr=adr+1        -   EndIf

Else

-   -   ColorNWriteEnable=FALSE

EndIf

If (HCU_OutputValid)

-   -   firstEncountered=NOT(firstEncountered)

EndIf

EndWhile

Address generation for reading is trickier, since it is tied to thetiming for DRAM access (both reading and writing), buffer EF access, andtherefore color 1 generation. It is more fully explained below.

Address generation for buffers C, D, E, F, and colorN are all tied tothe timing of DRAM access, and must not interfere with color 1processing with regards to buffers E and F. The basic principle is thatthe data for a single segment of color N (either odd or even dots) istransferred from the DRAM to buffer EF via buffer CD. Once the data hasbeen read from DRAM those dots are replaced based on the values inColorBufferN. This is done for each of the colors in odd and even dots.After a complete segment's worth of dots has accumulated (20 sets of 64cycles), then the process begins again. Once the data for all segmentsin a given printline has been transferred from and to DRAM, the currentaddress for that color's DRAM buffer is advanced so that it will be theappropriate number of lines until the particular data for the color'sline is read back from DRAM. In this respect then, the DRAM acts as aform of FIFO. Consequently color N (either odd or even) is read fromDRAM into buffer D while copying color N (same odd/even sense) to bufferC. The copying of data to buffer C takes 20 or 21 cycles depending onwhether the OutputValid flag occurs during the 20 transfers. Once bothtasks have finished (typically the DRAM access will be the slower task),the second part of the process begins. The data in buffer C is writtento DRAM (the same locations as were just read) and the data in buffer Dis copied to buffer EF (again, no color N data is transferred to bufferEF while the OutputValid flag is set since color 1 data is beingtransferred). When both tasks have finished the same process occurs forthe other sense of color N (either odd or even), and then for each ofthe remaining colors. The entire double process happens 10 times. Theaddresses for each of the current lines in DRAM are then updated for thenext line's processing to begin.

In terms of bandwidth, the DRAM access for dot data buffers consumes thegreat majority of all DRAM access from PEC. For each print line we readan entire dot line for colors 2-6, and write an entire dot line forcolors 2-6. For the maximum of 15 segments this equates to 2×5×15×1280bits=192,000 bits (24,000 bytes) per print line. For the fastestprinting system (30,000 lines per second) this equates to 687 MB/sec.For 1 page per second printing the bandwidth required is 312 MB/sec.Since the bandwidth is so high, the addresses of the various half-linesfor each color in DRAM should be optimized for the memory type beingused. In an RDRAM memory system for example, the very first half-linebuffer is aligned for each color to a 1 KByte boundary to maximizepage-hits on DRAM access. As the various segments are processed it isnecessary to ensure that if the start of the next segment was going tobe aligned at byte 960 within the 1 KByte page, then the 640-bit accesswould span 2 pages. Therefore the variable DRAMMaxVal is used to checkfor this case, and if it occurs, the address is rounded up for the nexthalf-line buffer to be page-aligned. Consequently the only waste is 64bytes per 13 segments, but have the advantage of the 640-bit accesscompletely within a single page.

The address generation process can be considered as NumSegments worth of10 sets of: 20×32-bit reads followed by 20×32-bit writes, and it can beseen in the following pseudocode: EFStartAdr = 0 Do NumSegments times:  For CurrColor = 0 to MaxHalfColors    DRAMStartAddress =ColorCurrAdr[CurrColor]    While reading 640 bits from DRAMStartAddress   into D(>= 20 cycles)     ColorNAdr = 0     While (ColorNAdr != 20)     If (NOT HCU_OutputValid)       TransferColorNBuffer[ColorNAdr|CurrColor_bit0] to C[ColorNAdr]       ColorNAdr =ColorNAdr + 1      EndIf     EndWhile    EndWhile - wait until read hasfinished    While writing 640 bits from C into    DRAMStartAddress (>=20cycles)     ColorNAdr = 0     EFAdr = EFStartAdr     While (ColorNAdr !=20)      If (NOT HCU_OutputValid)       Transfer D[ColorNAdr] toEF[CurrColor|EFAdr]       If ((ColorNAdr == 19) AND       (CurrColor ==NumHalfColors))        EFStartAdr = EFAdr + 1       Else        EFAdr =EFAdr + 1       EndIf       ColorNAdr = ColorNAdr + 1      EndIf    EndWhile    EndWhile - wait until write has finished    If(DRAMStartAddress == DRAMMaxVal)     ColorCurrAdr[currColor] = round upDRAMStartAddress to next 1KByte page    Else     ColorCurrAdr[currColor]= DRAMStartAddress + 640 bits    EndIf    If (Segment == maxSegments)    If (ColorCurrRow[CurrColor] == ColorMaxRow[CurrColor])     ColorCurrRow[currColor] = ColorStartRow[currColor]     ColorCurrAdr[currColor] = ColorStartAdr[currColor]     Else     ColorStartRow[currColor] = ColorCurrRow[currColor] + 1     EndIf   EndIf   EndFor EndDo

Wait until next Advance signal from PHI

Note that the MaxHalfColors register is one less than the number ofcolors in terms of odd and even colors treated separately, but notincluding color 1. For example, in terms of a standard 6 color printingsystem there are 10 (colors 2-6 in odd and even), and so MaxHalfColorsshould be set to 9.

The LLFU requires 2 NumSegments cycles to prepare the first 180 bits ofdata for the PHI. Consequently the print head should be started and thefirst LineSync pulse must occur this period of time after the LLFU hasstarted. This allows the initial Transfer value to be valid and the next90-bit value to be ready to be loaded into the Transfer register.

The print head interface (PHI) is the means by which the processor loadsthe print head with the dots to be printed, and controls the actual dotprinting process. It takes input from the LLFU and outputs data to theprint head itself. The PHI will be capable of dealing with a variety ofprint head lengths and formats. The internal structure of the PHI shouldallow for a maximum of 6 colors, 8 segments per transfer, and a maximumof 2 segment groups. This should be sufficient for a 15 segment (8.5inch) printer capable of printing A4/Letter at full bleed.

A copending application titled Print Head Driven by Multiple Enginecontrollers to the inventors Paul Lapstum and Simon Walmsley describesprint engine controller adaptations useful to interface multiple chipsto a print head.

Throughout the specification the aim has been to describe the preferredembodiments of the invention without limiting the invention to any oneembodiment or specific collection of features. Persons skilled in theart may realize variations from the specific embodiments that willnonetheless fall within the scope of the invention.

1. An inkjet printer comprising: a printhead; and a controller forcontrolling the print head, the controller comprising: an interface forreceiving compressed page data; a first decoder for decoding continuoustone image planes in the received compressed page data; a second decoderfor decoding bi-level image planes in the received compressed page data;a half-toner for dithering separate color planes of the decodedcontinuous tone image planes which are output by the first decoder toseparate buffers of the half-toner and a compositor for compositing thedecoded bi-level image planes output by the second decoder with thedithered image planes; and a print head interface for outputting thecomposite to the print head.
 2. A printer as claimed in claim 1, whereinthe half-toner and compositor are configured to scale the receivedcompressed page data in the bi-level image plane.
 3. A printer asclaimed in claim 1, wherein the half-toner and compositor are configuredto scale the received compressed page data in the continuous tone imageplane.
 4. A printer as claimed in claim 1, wherein the second decoder isa Group 4 facsimile decoder.
 5. A printer as claimed in claim 1, whereinthe second decoder outputs the decoded bi-level image planes torespective buffers of the half-toner.
 6. A printer as claimed in claim1, wherein the controller further comprises a third encoder for encodingan infrared image plane, the print head interface being configured tooutput the infrared image plane to the print head so that infrared inktags are printed on a printed page.